#ifndef APPLICATION_H_INCLUDED
#define	APPLICATION_H_INCLUDED

#include <GL/glui.h>
#include "Simulation.h"
#include "Visualization.h"

class Application
{
	private:
		
		// GLUI control IDs
                // Add new controls here!
		enum UiControlID
		{
                    QuitButton,
                    PauseButton
		};
	
	public:
		
		Application();
		~Application();				
				
		static void initialize(int *argc, char** argv);
		static void initUI();
		static void outputUsage();		
		static void display();
		static void update();
		static void reshape(int w, int h);						// Handle window resizing (reshaping) events
		static void keyboard(unsigned char key, int x, int y);	// Handle key presses
		static void drag(int mx, int my);						// Handle mouse drag
		static void visualize();		
		static void quit();
                static void pause();
		static void buttonHandler(int id);
        static void selectColorMode(int dum);
        static void selectScalarDataSet(int dum);
        static void selectVectorDataSet(int dum);
        static void selectScalingMode(int dum);
        static void selectNLevels(int dum);
        static void selectVectorScale(int dum);
        static void setHue(int dum);
        static void setSat(int dum);
        static void setVal(int dum);
        
        static void selectColorModeVec(int dum);        
        static void selectScalingModeVec(int dum);
        static void selectNLevelsVec(int dum);        
        static void setHueVec(int dum);
        static void setSatVec(int dum);
        static void setValVec(int dum);
        
        
                
                
		
	private:
		
		static Simulation simulation;			// the smoke simulation
		static Visualization visualization;		// visualization of the simulation
		
		static int winWidth, winHeight;			//size of the graphics window, in pixels

		static GLUI *glui;						// user interface
		static int main_window;
        
        static void setWidgets();
        static void setHSVGray();
};

#endif

